//
// Created by mio on 25-4-11.
//

#include "TaskScheduler.h"

TaskScheduler::TaskScheduler(int id) : id_(id), is_shutdown_(false)
{
}

TaskScheduler::~TaskScheduler()
{
}

void TaskScheduler::Start()
{
    is_shutdown_ = false;
    while (!is_shutdown_.load()) // 使用 load() 原子地读取停止标志
    {
        // 处理定时器事件：检查并触发所有到期的定时器
        timer_queue_.HandleTimerEvent();
        int64_t timeout = this->timer_queue_.GetTimeRemaining();
        // 处理 I/O 事件：调用虚函数，由派生类实现具体的 I/O 等待和处理逻辑
        HandleEvent((int)timeout);
    }
}

void TaskScheduler::Stop()
{
    is_shutdown_ = true;
}

TimerId TaskScheduler::AddTimer(const TimerEvent& event, uint32_t mesc)
{
    return timer_queue_.AddTimer(event, mesc);
}

void TaskScheduler::RemoveTimer(TimerId timerId)
{
    timer_queue_.RemoveTimer(timerId);
}
